package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// _string 处理函数用于向客户端返回一段简单的字符串。
// 它接受一个 gin.Context 对象作为参数，用于与HTTP请求和响应进行交互。
// 参数:
//
//	c *gin.Context: 包含请求和响应信息的上下文对象。
func _string(c *gin.Context) {
	c.String(http.StatusOK, "Hello world") // 向客户端返回状态码200和字符串"Hello world"。
}

// _jsaon 处理函数用于向客户端返回一个包含用户信息的JSON对象。
// 它接受一个 gin.Context 对象作为参数，用于与HTTP请求和响应进行交互。
// 参数:
//
//	c *gin.Context: 包含请求和响应信息的上下文对象。
func _josn(c *gin.Context) {
	// UserInfo 结构体用于定义用户信息的JSON响应格式。
	// 字段说明:
	//   UserName: 用户名
	//   Age: 用户年龄
	//   Password: 用户密码，不参与JSON序列化
	type UserInfo struct {
		UserName string `json:"user_name"` // 用户名字段映射到JSON键"user_name"
		Age      int    `json:"age"`       // 年龄字段映射到JSON键"age"
		Password string `json:"-"`         // 密码字段不包含在JSON响应中
	}

	// 创建一个UserInfo结构体实例，用于模拟用户信息。
	//user := UserInfo{
	//	UserName: "张三",     // 设置用户名为"张三"
	//	Age:      18,       // 设置年龄为18
	//	Password: "123456", // 设置密码为"123456"，该字段不会被序列化到JSON中
	//}

	//json响应map
	//userMap := map[string]string{
	//	"user_name": "张三",
	//	"age":       "18",
	//	"password":  "123456",
	//}
	// 向客户端返回状态码200和包含用户信息的JSON对象。
	//c.JSON(http.StatusOK, user)
	//c.JSON(http.StatusOK, userMap)
	c.JSON(http.StatusOK, gin.H{"name": "zhangsan", "age": 55})
}
func _xml(c *gin.Context) {
	c.XML(http.StatusOK, gin.H{"name": "zhangsan", "age": 55})
}
func _ymal(c *gin.Context) {
	c.YAML(http.StatusOK, gin.H{"name": "zhangsan", "age": 55})
}
func _html(c *gin.Context) {
	c.HTML(http.StatusOK, "index.html", gin.H{"name": "zhangsan", "age": 55})
}
func _redirect(c *gin.Context) {
	c.Redirect(302, "https://wwww.baidu.com")
}
func main() {
	r := gin.Default()
	r.LoadHTMLGlob("templates/*")
	r.StaticFile("/static/demo01.png", "./static/demo01.png")
	r.GET("/", _string)
	r.GET("/json", _josn)
	r.GET("/xml", _xml)
	r.GET("/ymal", _ymal)
	r.GET("/html", _html)
	r.GET("/baidu", _redirect)
	err := r.Run(":8080")
	if err != nil {
		return
	}
}
